package sel.me.spring.boot159.web.config.feign;


//import feign.Client;
//import feign.Contract;
//import feign.Feign;
//import feign.RequestInterceptor;
//import feign.codec.Decoder;
//import feign.codec.Encoder;
//import org.springframework.cloud.netflix.feign.FeignClientsConfiguration;
//import org.springframework.context.annotation.Import;

/**
 * 帮助手动进行FeignClient build的configuration基类
 * FeignClient注解无法支持同一service具有多种不同配置的FeignClient，因此，在必要时需要手动build FeignClient
 * https://github.com/spring-cloud/spring-cloud-netflix/issues/1211
 *
 * @author shenenlu 2021年05月24日 下午15:14:16
 */
//@Import(FeignClientsConfiguration.class)
public class FeignClientConfigurer {

//    private Decoder decoder;
//    private Encoder encoder;
//    private Client client;
//    private Contract contract;
//    private LoadBalancedResourceDetails loadBalancedResourceDetails;
//
//    public FeignClientConfigurer(Decoder decoder, Encoder encoder, Client client, Contract contract, LoadBalancedResourceDetails loadBalancedResourceDetails) {
//        this.decoder = decoder;
//        this.encoder = encoder;
//        this.client = client;
//        this.contract = contract;
//        this.loadBalancedResourceDetails = loadBalancedResourceDetails;
//    }
//
//    /**
//     * DefaultOAuth2ClientContext使得Feign Client在调用前能获取到一个默认的"internal"身份（需要额外的oauth2配置），适用于在消息队列触发等场景下的跨服务调用
//     * @return
//     */
//    public RequestInterceptor getOAuth2RequestInterceptor() {
//        return new OAuth2FeignRequestInterceptor(new DefaultOAuth2ClientContext(), loadBalancedResourceDetails);
//    }
//
//    /**
//     * UserFeignClientInterceptor - 由JHipster脚手架生成的能自动在服务间调用时传递当前用户AccessToken的拦截器，当在服务间调用时需要传递用户身份时使用
//     * @return
//     */
//    public RequestInterceptor getUserFeignClientInterceptor() {
//        return new UserFeignClientInterceptor();
//    }
//
//    /**
//     * 为指定的service及接口创建一个AuthorizedFeignClient（使用OAuth2FeignRequestInterceptor拦截器）
//     * @param clazz
//     * @param serviceName
//     * @param <T>
//     * @return
//     */
//    public <T> T buildAuthorizedFeignClient(Class<T> clazz, String serviceName) {
//        return getBasicBuilder().requestInterceptor(getOAuth2RequestInterceptor()).target(clazz, buildServiceUrl(serviceName));
//    }
//
//    /**
//     * 为指定的service及接口创建一个AuthorizedUserFeignClient（使用UserFeignClientInterceptor拦截器）
//     * @param clazz
//     * @param serviceName
//     * @param <T>
//     * @return
//     */
//    public <T> T buildAuthorizedUserFeignClient(Class<T> clazz, String serviceName) {
//        return getBasicBuilder().requestInterceptor(getUserFeignClientInterceptor()).target(clazz, buildServiceUrl(serviceName));
//    }
//
//    private String buildServiceUrl(String serviceName) {
//        return "http://" + serviceName;
//    }
//
//    /**
//     * 获取一个具有默认Encoder、Decoder、Client以及Contract的Feign.Builder
//     * @return
//     */
//    protected Feign.Builder getBasicBuilder() {
//        return Feign.builder().client(client).encoder(encoder).decoder(decoder).contract(contract);
//    }
}
